home *** CD-ROM | disk | FTP | other *** search
- unit Dates;
-
- {Gives time and date passed in DateTime format (defined by the DOS unit)
- as a fully formatted string. DFormat is a word type variable that tells
- the code how to handle the time and date:
-
-
- Bit Function: If 0: If 1:
- --- -------------------- -------------------- --------------------
- 15 ShowDOW Don't show day name Show day name
- 14 Century Show year as XX Show year as XXXX
- 13 SpaceDate No spaces in date Space between fields
- 12 CommaSep Use comma in date don't use comma
- 11 MonthType Numerical English name
- 10 > DateOrder | 00 -- DDMMYY | 10 -- YYMMDD
- 9 > | 01 -- MMDDYY | 11 -- YYDDMM
- 8 MonthName 3 letters only Full name of month
- 7 DateSep Space date with " " Space date with "-"
- 6 DTOrder time then date date then time
- 5 > TDSpace 00 - 11 : 1 - 4 spaces, respectively
- 4 >
- 3 HourPad Use needed spaces Always uses 2 spaces
- 2 HPadMeth Pad hour with " " Pad hour with "0"
- 1 MSPadMeth Pad min/sec with " " Pad min/sec with "0"
- 0 Show12_24 Use 12 hr. & am/pm 24-hour (military)
-
- Some fields require others to be set/clear to have any affect. I never
- got around to defining any constants for the fields, but that's easy
- enough to take care of in the interface section, if needed.
-
- Use freely in any venture, private or public, but if you use it in anything
- that makes money, please at the very least, let me the author of this unit,
- know about it! :-)
-
- Standard disclaimers apply.
-
- Written (and Submitted) by Scott Earnest, some time in 1994
- e-mail (Internet): scott@whiplash.pc.cc.cmu.edu
- }
-
- interface
-
- uses DOS;
-
- var
- lastdate : string;
-
- function DateTimeString (Chron : DateTime; DFormat : word) : string;
-
- implementation
-
- const
- Month3 : array [1 .. 12] of string[3] =
- ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
- 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
- MonthF : array [1 .. 12] of string [6] =
- ('uary', 'ruary', 'ch', 'il', '', 'e',
- 'y', 'ust', 'tember', 'ober', 'ember', 'ember');
- DayName : array [0 .. 6] of string[9] =
- ('Sunday', 'Monday', 'Tuesday', 'Wednesday',
- 'Thursday', 'Friday', 'Saturday');
- PadSpace = ' ';
- PadDash = '-';
- PadZero = '0';
-
- type
- TDateTimeFormat = record
- ShowDOW,
- Century,
- SpaceDate,
- CommaSep,
- MonthType,
- MonthName,
- DateSep,
- DTOrder,
- HourPad,
- HPadMeth,
- MSPadMeth,
- Show12_24 : boolean;
- DateOrder,
- TDSpace : byte;
- end;
-
- var
- df : TDateTimeFormat;
-
- procedure SetFlags_df (fvar : word);
-
- procedure shiftr;
-
- begin
- fvar := fvar shr 1;
- end;
-
- begin
- df.DateOrder := (fvar and $0600) shr 9;
- df.TDSpace := (fvar and $0030) shr 4;
- df.Show12_24 := odd (fvar); shiftr;
- df.MSPadMeth := odd (fvar); shiftr;
- df.HPadMeth := odd (fvar); shiftr;
- df.HourPad := odd (fvar); shiftr;
- shiftr; shiftr;
- df.DTOrder := odd (fvar); shiftr;
- df.DateSep := odd (fvar); shiftr;
- df.MonthName := odd (fvar); shiftr;
- shiftr; shiftr;
- df.MonthType := odd (fvar); shiftr;
- df.CommaSep := odd (fvar); shiftr;
- df.SpaceDate := odd (fvar); shiftr;
- df.Century := odd (fvar); shiftr;
- df.ShowDow := odd (fvar); shiftr;
- end;
-
- function CalcDOW (d, m, y : word) : byte;
-
- var
- t1, t2, t3, t4, t5, t6, t7 : integer;
-
- begin
- t1 := m + 12 * trunc (0.6 + 1 / m);
- t2 := y - trunc (0.6 + 1 / m);
- t3 := trunc (13 * (t1 + 1) / 5);
- t4 := trunc (5 * t2 / 4);
- t5 := trunc (t2 / 100);
- t6 := trunc (t2 / 400);
- t7 := t3 + t4 - t5 + t6 + d - 1;
- CalcDOW := t7 - 7 * trunc (t7 / 7);
- end;
-
- function PadNum (num : word; padch : char; places : byte) : string;
-
- var
- holdstr,
- padstr : string;
-
- begin
- fillchar (padstr, sizeof(padstr), padch);
- padstr[0] := #16;
- str (num, holdstr);
- padstr := concat (padstr, holdstr);
- delete (padstr, 1, length (padstr) - places);
- PadNum := padstr;
- end;
-
- procedure BuildTime (var dt : DateTime; var ts : string);
-
- var
- pad : char;
- tempstr : string;
- hour : byte;
-
- begin
- case df.MSPadMeth of
- true : pad := PadZero;
- false : pad := PadSpace;
- end;
- ts := concat (':', PadNum (dt.min, pad, 2), ':', PadNum (dt.sec, pad, 2));
- case df.Show12_24 of
- true : hour := dt.hour;
- false : begin
- hour := dt.hour mod 12;
- if hour = 0 then hour := 12;
- case dt.hour of
- 0 .. 11 : ts := concat (ts, 'a');
- 12 .. 23 : ts := concat (ts, 'p');
- end;
- end;
- end;
- case df.HourPad of
- true : begin
- case df.HPadMeth of
- true : pad := PadZero;
- false : pad := PadSpace;
- end;
- ts := concat (PadNum (hour, pad, 2), ts);
- end;
- false : begin
- str (hour, tempstr);
- ts := concat (tempstr, ts);
- end;
- end;
- end;
-
- procedure BuildDate (var dt : DateTime; var ds : string);
-
- var
- DOW : byte;
- tempstr : string;
- pad : string[1];
- ystr, dstr : string[4];
- mstr : string[9];
-
- begin
- if df.ShowDOW then
- DOW := CalcDOW (dt.day, dt.month, dt.year);
- ystr := PadNum (dt.year, ' ', (byte(df.Century) + 1) * 2);
- case df.MonthType of
- false : case df.SpaceDate of
- false : mstr := PadNum (dt.month, '0', 2);
- true : str (dt.month, mstr);
- end;
- true : begin
- mstr := Month3[dt.month];
- if df.MonthName then
- mstr := concat (mstr, MonthF[dt.month]);
- end;
- end;
- case df.SpaceDate of
- false : dstr := PadNum (dt.day, '0', 2);
- true : str (dt.day, dstr);
- end;
- case df.SpaceDate of
- false : begin
- case df.DateOrder of
- 0 : ds := concat (dstr, mstr, ystr);
- 1 : ds := concat (mstr, dstr, ystr);
- 2 : ds := concat (ystr, mstr, dstr);
- 3 : ds := concat (ystr, dstr, mstr);
- end;
- end;
- true : begin
- case df.DateSep of
- false : pad := PadSpace;
- true : pad := PadDash;
- end;
- case df.DateOrder of
- 0 : ds := concat (dstr, pad, mstr, pad, ystr);
- 1 : case df.CommaSep of
- false : ds := concat (mstr, pad, dstr, pad, ystr);
- true : ds := concat (mstr, pad, dstr, ',', pad, ystr);
- end;
- 2 : ds := concat (ystr, pad, mstr, pad, dstr);
- 3 : ds := concat (ystr, pad, dstr, pad, mstr);
- end;
- end;
- end;
- if df.ShowDOW then
- ds := concat (DayName[DOW], ' ', ds);
- end;
-
- function spaces (ns : byte) : string;
-
- var
- holdstr : string;
-
- begin
- fillchar (holdstr, sizeof(holdstr), 32);
- holdstr[0] := chr(ns);
- spaces := holdstr;
- end;
-
- function DateTimeString (Chron : DateTime; DFormat : word) : string;
-
- var
- dstr, tstr : string;
-
- begin
- dstr := ''; tstr := '';
- SetFlags_df (DFormat);
- BuildTime (Chron, tstr);
- BuildDate (Chron, dstr);
- case df.DTOrder of
- false : DateTimeString := concat (tstr, spaces(df.TDSpace + 1), dstr);
- true : DateTimeString := concat (dstr, spaces(df.TDSpace + 1), tstr);
- end;
- end;
-
- begin
- lastdate := '';
- end.